// requestAPI.js

/**
 * 请求拦截器
 */
function requestInterceptor(config) {
  // 在请求发送之前设置 openid
  const openid = wx.getStorageSync('openid'); // 从本地缓存中获取 openid
  if (openid) {
    config.header['openid'] = openid; // 将 openid 添加到请求头中
  }
  return config;
}

/**
 * 响应拦截器
 */
function responseInterceptor(res) {
  // 对响应数据做点什么
  if (res.statusCode !== 200) {
    // 处理不同的状态码
    wx.showToast({
      title: '请求失败',
      icon: 'none',
      duration: 2000
    });
    return Promise.reject(res);
  }
  return res.data;
}

/**
 * 发起请求
 * @param {String} url 请求的 URL
 * @param {String} method 请求方法（GET、POST、PUT、DELETE）
 * @param {Object} data 请求参数
 * @param {Object} header 请求头
 */
// const BASE_URL = 'http://106.225.204.10:8888'; // 修正了 BASE_URL 的定义
// const BASE_URL = 'https://apifoxmock.com/m2/5796913-5481457-default'; // 修正了 BASE_URL 的定义
const BASE_URL = 'https://dev-sjsw.fastokgo.com/mock'; // 修正了 BASE_URL 的定义
function request({ url, method = 'GET', data = {}, header = {} }) {
  const isFullUrl = url.startsWith('http://') || url.startsWith('https://');
  const finalUrl = isFullUrl ? url : BASE_URL + url; // 如果是完整路径，则不拼接 BASE_URL
  return new Promise((resolve, reject) => {
    wx.request({
      url: finalUrl,
      method: method,
      data: data,
      header: {
        'content-type': 'application/json',
        ...header
      },
      success: (res) => {
        resolve(responseInterceptor(res));
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

/**
 * 获取天气信息（和风天气）
 * @param {String} token 和风天气 API 密钥
 * @param {String} location 城市编码（例如 101010100 表示北京）
 */



// 封装快捷方法
const instance = {
  get: function (relativeUrl, data = {}, header = {}) {
    return request({ url: relativeUrl, method: 'GET', data, header });
  },
  post: function (relativeUrl, data = {}, header = {}) {
    return request({ url: relativeUrl, method: 'POST', data, header });
  },
  put: function (relativeUrl, data = {}, header = {}) {
    return request({ url: relativeUrl, method: 'PUT', data, header });
  },
  delete: function (relativeUrl, data = {}, header = {}) {
    return request({ url: relativeUrl, method: 'DELETE', data, header });
  },
  // 添加 upload 方法到 requestAPI 对象
  upload: function (relativeUrl, filePath, name, formData) {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: BASE_URL + relativeUrl,
        filePath: filePath,
        name: name,
        formData: formData,
        success: function (res) {
          const data = res.data;
          try {
            const response = JSON.parse(data);
            if (response.success) {
              resolve(response);
            } else {
              reject(new Error('图片上传失败'));
            }
          } catch (error) {
            reject(error);
          }
        },
        fail: function (err) {
          reject(err);
        }
      });
    });
  }
};

// 导出新增的天气获取函数
export default {
  ...instance,
  
};
